package co.com.smart.eagle.client.activity;

import java.util.List;

import co.com.smart.eagle.client.EagleCallBack;
import co.com.smart.eagle.client.factory.EagleFactory;
import co.com.smart.eagle.client.rpcservices.login.LoginService;
import co.com.smart.eagle.client.rpcservices.login.LoginServiceAsync;
import co.com.smart.eagle.client.view.CrearAplicacionesView;
import co.com.smart.eagle.client.view.CrearAplicacionesView.Presenter;
import co.com.smart.eagle.client.view.impl.CrearApplicacionViewImpl.FocusAppPlace;
import co.com.smart.eagle.client.view.impl.components.SmartAlertDialog.CallBackModal;
import co.com.smart.eagle.client.view.util.SmartLoading;
import co.com.smart.eagle.client.view.util.SmartMensajes;
import co.com.smart.eagle.infrastructure.dto.AplicacionesDTO;
import co.com.smart.eagle.infrastructure.dto.SmartTipoMensajes;

import com.google.gwt.activity.shared.AbstractActivity;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.ui.AcceptsOneWidget;

public class CrearAplicacionesActivity extends AbstractActivity implements Presenter{

	private CrearAplicacionesView view;
	
	private LoginServiceAsync service = GWT.create(LoginService.class);
	
	public CrearAplicacionesActivity(EagleFactory eagleFactory) {
		view = eagleFactory.getCrearAplicacionesView();
		view.setPresenter(this);
		view.cleanForm();
		cargarApps();
	}
	
	@Override
	public void start(AcceptsOneWidget panel, EventBus eventBus) {
		panel.setWidget(view);
	}

	@Override
	public void crearApp() {
		EagleCallBack<Void> callBack = new EagleCallBack<Void>(true) {
			@Override
			public void success(Void result) {
				SmartMensajes.getInstance().show("Informaci\u00F3n","Aplicaci\u00F3n almacenada correctamente",
						SmartTipoMensajes.INFORMACION, new CallBackModal() {

							@Override
							public void finModal() {
					    		view.cleanForm();
					    		cargarApps();
					    		view.setFocus(FocusAppPlace.APP);
							}
						});
			}
		};
		SmartLoading.getInstance().show();
		AplicacionesDTO app = new AplicacionesDTO();
		app.setDsAplicacion(view.getAppName());
		service.setApplication(app, callBack);
	}

	@Override
	public void cargarApps() {
		EagleCallBack<List<AplicacionesDTO>> callBack = new EagleCallBack<List<AplicacionesDTO>>(true) {
			@Override
			public void success(List<AplicacionesDTO> result) {
				view.setApps(result);
			}
		};
		SmartLoading.getInstance().show();
		service.getApplications(callBack);
	}

	@Override
	public boolean validateCreateApp() {
		if("".equals(view.getAppName())){
			SmartMensajes.getInstance().show("Validaci\u00F3n","Ingrese la aplicaci\u00F3n",
					SmartTipoMensajes.ADVERTENCIA, new CallBackModal() {

						@Override
						public void finModal() {
							view.setFocus(FocusAppPlace.APP);
						}
					});
			return Boolean.FALSE;
		}
		return Boolean.TRUE;
	}

	@Override
	public void editApp(AplicacionesDTO app) {
	}

	@Override
	public void deleteApp(AplicacionesDTO app) {
		EagleCallBack<Void> callBack = new EagleCallBack<Void>(true) {
			@Override
			public void success(Void result) {
				
				SmartMensajes.getInstance().show("Informaci\u00F3n","Aplicaci\u00F3n eliminada correctamente",
						SmartTipoMensajes.INFORMACION, new CallBackModal() {

							@Override
							public void finModal() {
					    		view.cleanForm();
					    		cargarApps();
					    		view.setFocus(FocusAppPlace.APP);
							}
						});

			}
		};
		SmartLoading.getInstance().show();
		service.borrarApplication(app, callBack);
	}


}
